/**
 * 时长格式化工具函数
 * 支持将秒数、毫秒数自动转换为合适的单位显示
 */

/**
 * 格式化秒数为可读的时长字符串
 * @param {number} seconds - 秒数
 * @param {object} options - 格式化选项
 * @param {boolean} options.showDays - 是否显示天数，默认true
 * @param {boolean} options.showSeconds - 是否显示秒数，默认true
 * @param {string} options.language - 语言，'zh'中文 'en'英文，默认'zh'
 * @returns {string} 格式化后的时长字符串
 */
export function formatDurationFromSeconds(seconds, options = {}) {
  const {
    showDays = true,
    showSeconds = true,
    language = 'zh'
  } = options

  if (!seconds || seconds === 0) {
    return language === 'zh' ? '0秒' : '0s'
  }

  const days = Math.floor(seconds / 86400)
  const hours = Math.floor((seconds % 86400) / 3600)
  const minutes = Math.floor((seconds % 3600) / 60)
  const remainingSeconds = seconds % 60

  const units = language === 'zh' 
    ? { day: '天', hour: '小时', minute: '分钟', second: '秒' }
    : { day: 'd', hour: 'h', minute: 'm', second: 's' }

  const parts = []

  if (showDays && days > 0) {
    parts.push(`${days}${units.day}`)
  }
  
  if (hours > 0) {
    parts.push(`${hours}${units.hour}`)
  }
  
  if (minutes > 0) {
    parts.push(`${minutes}${units.minute}`)
  }
  
  if (showSeconds && remainingSeconds > 0) {
    parts.push(`${remainingSeconds}${units.second}`)
  }

  // 如果所有部分都为0，至少显示0秒
  if (parts.length === 0) {
    return language === 'zh' ? '0秒' : '0s'
  }

  // 根据时长大小智能显示
  if (days > 0) {
    // 大于1天，只显示天、小时、分钟
    return parts.slice(0, 3).join(language === 'zh' ? ' ' : ' ')
  } else if (hours > 0) {
    // 大于1小时，显示小时、分钟、秒
    return parts.slice(0, 3).join(language === 'zh' ? ' ' : ' ')
  } else {
    // 小于1小时，显示分钟、秒
    return parts.join(language === 'zh' ? ' ' : ' ')
  }
}

/**
 * 格式化毫秒数为可读的时长字符串
 * @param {number} milliseconds - 毫秒数
 * @param {object} options - 格式化选项
 * @returns {string} 格式化后的时长字符串
 */
export function formatDurationFromMilliseconds(milliseconds, options = {}) {
  if (!milliseconds || milliseconds === 0) return '-'
  
  const seconds = Math.floor(milliseconds / 1000)
  return formatDurationFromSeconds(seconds, options)
}

/**
 * 自动检测时长单位并格式化
 * @param {number} duration - 时长数值
 * @param {string} unit - 单位：'ms'毫秒, 's'秒, 'auto'自动检测
 * @param {object} options - 格式化选项
 * @returns {string} 格式化后的时长字符串
 */
export function formatDuration(duration, unit = 'auto', options = {}) {
  if (!duration || duration === 0) {
    return options.language === 'en' ? '0s' : '0秒'
  }

  // 自动检测单位
  if (unit === 'auto') {
    // 如果数值很大，可能是毫秒
    if (duration > 100000) {
      unit = 'ms'
    } else {
      unit = 's'
    }
  }

  switch (unit) {
    case 'ms':
      return formatDurationFromMilliseconds(duration, options)
    case 's':
    default:
      return formatDurationFromSeconds(duration, options)
  }
}

/**
 * 简化的时长格式化函数，用于快速替换现有代码
 * @param {number} value - 时长值（秒数或毫秒数）
 * @param {string} type - 类型：'seconds' 或 'milliseconds'
 * @returns {string} 格式化后的时长字符串
 */
export function formatTime(value, type = 'seconds') {
  if (type === 'milliseconds') {
    return formatDurationFromMilliseconds(value)
  }
  return formatDurationFromSeconds(value)
}

// 默认导出
export default {
  formatDurationFromSeconds,
  formatDurationFromMilliseconds,
  formatDuration,
  formatTime
}
